home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / MAC / THINKC / 4_0 / ASKCOLOR / ASKCOLOR.C
C/C++ Source or Header  |  1991-08-27  |  3KB  |  133 lines

  1. /*
  2.     ColorPicker.c
  3.         
  4.     Copyright 1991 by Brown University. All rights reserved.
  5.     
  6.     THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESSED OR IMPLIED
  7.     WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF 
  8.     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  9.     
  10.     Usage:
  11.     
  12.          get AskColor( <prompt>, <rgb color> )
  13.     
  14.     Replace prompt with some explanitory message and <rgb color> with a
  15.     string of three items, "red,green,blue". A string of three items is
  16.     returned if the user chooses a color. Otherwise, empty is returned.
  17.     
  18. */
  19.  
  20.  
  21. #include "hyperxcmd.h"
  22. #include <SetUpA4.h>
  23. #include <stdlib.h>
  24.  
  25.  
  26.  
  27.  
  28. RGBColor * StringToRGBColor( StringPtr string, RGBColor * color );
  29.  
  30. RGBColor * StringToRGBColor( StringPtr string, RGBColor * color )
  31. {
  32.     char * digits;
  33.     
  34.     digits = PtoCstr( string );
  35.     
  36.     color->red   = (int) strtol( digits, &digits, 10 );
  37.     color->green = (int) strtol( digits, &digits, 10 );
  38.     color->blue  = (int) strtol( digits, &digits, 10 );
  39.  
  40.     CtoPstr( (char *) string );
  41.  
  42. } /* StringToRGBColor */
  43.  
  44.  
  45.  
  46.  
  47. StringPtr ZeroHandleToString( Handle handle, StringPtr string );
  48.  
  49. StringPtr ZeroHandleToString( Handle handle, StringPtr string )
  50. {
  51.     memset( string, 0, sizeof( 255 ) );
  52.     strncpy( (char *) string, *handle, sizeof( Str255 ) - 1 );
  53.     CtoPstr( (char *) string );
  54.     
  55. } /* ZeroHandleToString */
  56.  
  57.  
  58.  
  59. pascal void main( XCmdPtr paramPtr )
  60. {
  61.     Point    where;
  62.     Str255   prompt;
  63.     Str255   color;
  64.     RGBColor oldcolor;
  65.     RGBColor newcolor;
  66.     char     result[64];
  67.     
  68.     RememberA0();
  69.     SetUpA4();
  70.     
  71.         /*    Parse Paramater List */
  72.     
  73.     switch ( paramPtr->paramCount )
  74.     {
  75.         case 1:
  76.             switch ( **(paramPtr->params[0]) )
  77.             {
  78.                 case '?':
  79.                     paramPtr->returnValue = PasToZero( paramPtr, (StringPtr) "\pAskColor( \"prompt\", \"red green blue\" )" );
  80.                     break;
  81.                     
  82.                 case '!':
  83.                     paramPtr->returnValue = PasToZero( paramPtr, (StringPtr) "\pAskColor 1.0b2,Copyright 1991 by Brown University. All rights reserved." );
  84.                     break;
  85.                     
  86.                 case '@':
  87.                     paramPtr->returnValue = PasToZero( paramPtr, (StringPtr) "\pAndrew Gilmartin\rComputing & Information Services\rBrown University\rProvidence, RI 02912\rUSA\r(401) 863-7CIS\randrew_gilmartin@brown.edu (internet)" );
  88.                     break;
  89.                     
  90.                 default:
  91. /*                    SET_ERROR( ERROR_PARAMATER_COUNT );
  92. */                    break;
  93.             }
  94.             break;
  95.             
  96.         case 2:
  97.             ZeroHandleToString( paramPtr->params[0], prompt );
  98.             
  99.             ZeroHandleToString( paramPtr->params[1], color );
  100.             StringToRGBColor( color, &oldcolor );
  101.             
  102.             where.h = where.v = 0;
  103.             
  104.             if ( GetColor( where, &prompt, &oldcolor, &newcolor ) )
  105.             {
  106.                 sprintf
  107.                     ( result
  108.                     , "%lu %lu %lu"
  109.                     , (unsigned long) newcolor.red
  110.                     , (unsigned long) newcolor.green
  111.                     , (unsigned long) newcolor.blue );
  112.                     
  113.                 CtoPstr( result );
  114.                 
  115.                 paramPtr->returnValue = PasToZero( paramPtr, (StringPtr) result );
  116.             }
  117.             break;
  118.             
  119.         default:
  120. /*            SET_ERROR( ERROR_PARAMATER_COUNT );
  121. */            break;
  122.     }
  123.     
  124.     
  125. /*    if ( ERROR() != ERROR_NONE )
  126.         ErrorMessage( paramPtr );
  127. */        
  128.     RestoreA4();
  129.  
  130.     /* Bye, Bye! */
  131.     
  132. } /* main */
  133.